package com.java.test1;

import org.junit.Test;

/**
 * 正则表达式本身也是一个字符串，是由普通字符和元字符组成的模式字符串，它用来定义别的字符串的组成规则
 * <p>
 * String类中的boolean matches(String regex)方法可以用来判断当前字符串是否和参数regex指定的正则表达式匹配
 * 示例
 * String str="029-97669779"
 * boolean result=str.matches(0\\d{2}\\-[1-9]\\d{7});
 *
 * @author shkstart
 * @create 2021-01-11 20:08
 */
public class ZhengZeTest_1 {
    @Test
    public void test1() {
        //. 匹配任意单个字符
        System.out.println("a".matches("."));//true

        //[]用来给出取值集合，匹配其中  某一个  字符
        System.out.println("text".matches("te[bdsjaxdak]t"));//true
        //[]里边写-表示范围
        System.out.println("text".matches("te[a-z]t"));//true
        System.out.println("te3t".matches("te[0-9]t"));//true
        System.out.println("te3t".matches("te[a-z0-9]t"));//true
        System.out.println("te3 t".matches("te3[ ]t"));//true
        //()可以用来界定子表达式，匹配其中的有序序列(字符串)
        //元字符|表示或的关系 示例：b(lue|dw|dw)c(字符串)
        System.out.println("test".matches("te(ab|s|sda)t"));//true

        //元字符{n}表示前边的字符可以重复n次    {2，5}表示前边的元素可以重复2到5次；  {3，}表示至少可以重复3次
        //示例：  .{3,}(lue|lack|sdk);
        System.out.println("15615".matches("[0-9]{5}"));//true

        //对于重复次数的限制，还可以使用下列特殊元字符
        /*
         * * 表示前面的元素重复0次或者多次
         * ?表示前面的元素重复0次或一次
         * +表示前面的元素重复一次或多次
         *
         * */
        System.out.println("123".matches("[0-9]*"));
        System.out.println("".matches("[0-9]?"));
        System.out.println("123".matches("[0-9]+"));


        System.out.println("www.baidu.com".matches("www\\.[a-z]{1,}\\.(com)"));//true

        //转义字符 \  示例：.*\\(com|cn|org)


        //元字符^ 和 $ ，代表字符串开始，$代表字符串结束


        //在[]中 使用^ 表示非


        //比如：模式字符串 是 ‘B[^|mn]’,则表示B后跟的字符不能是l，m，n三者之一。"021-87888822"  "0511-4405222"
        System.out.println("0511-4405222".matches("0\\[0-9]{2,3}\\-([^0000][0-9]{7,8})"));//true

        System.out.println("www.151515qq.com".matches("www\\.[^000000][0-9]{6,11}\\(qq|cn|\\.(com)"));

        System.out.println("陕A·wt152".matches("陕(A|U)·([A-HJ-NP-z][A-HJ-NP-z]\\[0-9]{3})"));

    }

    public Boolean regex(String str) {
        //有两个字母 且首位是字母的
        //① 首字母
        Boolean flages = str.matches("陕(A|U)·([A-HJ-NP-Z][A-HJ-NP-Z]\\[0-9]{3}|[A-HJ-NP-Z]\\d\\[A-HJ-NP-Z]d{2}|[A-HJ-NP-Z]\\d{2}\\[A-HJ-NP-Z]d|[A-HJ-NP-Z]\\d{3}\\[A-HJ-NP-Z])");
        //② 第二个为字母
        Boolean flages1 = str.matches("陕(A|U)·(d[A-HJ-NP-Z][A-HJ-NP-Z]\\d{2}|d[A-HJ-NP-Z])");


        return flages;
    }

    public Boolean IPTest() {
        //


        return true;
    }

}
